package com.zmn.plat.persistence.interfaces.category;

import com.zmn.common.dto.StatusDTO;
import com.zmn.plat.model.entity.category.BaseCategoryAttributeEnum;
import com.zmn.plat.model.entity.category.BaseCategoryAttributeEnumQuery;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * BaseCategoryAttributeEnumDAO继承基类
 *
 * @author tanghongjun
 * @since 18/10/15 11:09
 */
public interface AttributeEnumDAO {

    /**
     * 描述: BaseCategoryAttributeEnum key 查询数据
     *
     * @param: enumId
     * @return: BaseCategoryAttributeEnum
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    BaseCategoryAttributeEnum findByKey(Integer enumId);

    /**
     * 描述: 根据查询条件分页查询
     *
     * @param: BaseCategoryAttributeEnumQuery
     * @return: List<BaseCategoryAttributeEnum>
     * @since: 2018/10/15 16:41
     */
    List<BaseCategoryAttributeEnum> listPageByQuery(BaseCategoryAttributeEnumQuery query);

    /**
     * 描述: 根据查询条件查询所有数据
     *
     * @param: BaseCategoryAttributeEnumQuery
     * @return: List<BaseCategoryAttributeEnum>
     * @since: 2018/10/15 16:41
     */
    List<BaseCategoryAttributeEnum> listByQuery(BaseCategoryAttributeEnumQuery query);

    /**
     * 描述: 根据属性id查询数据
     *
     * @param: BaseCategoryAttributeEnumQuery
     * @return: List<BaseCategoryAttributeEnum>
     * @since: 2018/10/15 16:41
     */
    List<BaseCategoryAttributeEnum> listByKeys(@Param("enumIds") List<Integer> enumIds);

    /**
     * 描述: BaseCategoryAttributeEnum 数据
     *
     * @return: List<BaseCategoryAttributeEnum>
     * @since: 2018/10/15 16:41
     */
    List<BaseCategoryAttributeEnum> listAll();

    /**
     * 描述: 根据查询条件统计满足条件的数据条数
     *
     * @param: BaseCategoryAttributeEnumQuery
     * @return: Integer
     * @since: 2018/10/15 16:41
     */
    Integer countByQuery(BaseCategoryAttributeEnumQuery query);

    /**
     * 描述: 根据主键修改数据
     *
     * @param: BaseCategoryAttributeEnum
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer updateByKey(BaseCategoryAttributeEnum baseCategoryAttributeEnum);

    /**
     * 描述：根据 id 修改排序
     *
     * @param attributeEnum 条件
     */
    void updateSortKey(BaseCategoryAttributeEnum attributeEnum);

    /**
     * 描述：根据 id 批量修改状态
     * @param dto 条件
     */
    void updateStatusBatch(StatusDTO dto);

    /**
     * 描述: 新增数据
     *
     * @param: BaseCategoryAttributeEnum
     * @return: 执行结果码
     * @since: 2018/10/15 16:41
     */
    Integer insert(BaseCategoryAttributeEnum baseCategoryAttributeEnum);

    /**
     * 描述: 根据主键删除数据
     *
     * @param: enumId
     * @return: 执行结果码
     * @since: 2018/10/15 16:41
     */
    Integer deleteByKey(Integer enumId);

    /**
     * 根据属性查询所有值
     *
     * @param attributeId id
     * @return
     */
    List<BaseCategoryAttributeEnum> listAttributeId(Integer attributeId);

    /**
     * 通过分类查询所有值
     *
     * @param categId 分类ID
     * @return
     */
    List<BaseCategoryAttributeEnum> listByCategoryId(Integer categId);

}